import { createRouter, createWebHashHistory, type RouteLocationNormalized } from 'vue-router';
import routes from './routes';
import { useCachedViewStoreHook } from '@/store/modules/cached-view';
import NProgress from '@/utils/progress';
import setPageTitle from '@/utils/set-page-title';
import { useUserStore } from '@/store/modules/user-info';
import { i18n } from '@/i18n'; // ✅ 使用全局 i18n 实例

const router = createRouter({
  history: createWebHashHistory(),
  routes,
  scrollBehavior(to, from, savedPosition) {
    // 如果 savedPosition 存在，表示是返回到前一个页面
    if (savedPosition) {
      return savedPosition;
    } else {
      // 默认每次切换到新页面时滚动到顶部
      return { top: 0 };
    }
  },
});

export interface toRouteType extends RouteLocationNormalized {
  meta: {
    title?: string;
    noCache?: boolean;
  };
}

router.beforeEach((to: toRouteType, from, next) => {
  const userStore = useUserStore();
  const token = userStore.accessToken;

  NProgress.start();

  // 页面标题处理
  const translatedTitle = i18n.global.t(to.meta.title);
  setPageTitle(translatedTitle);

  // 登录页逻辑
  if (to.name === 'Login') {
    // 如果已有 token，但不是从“添加账号”跳过来的，则跳转 Home
    if (token && to.query.from !== 'account-switch') {
      return next({ name: 'Home' });
    } else {
      return next(); // 放行
    }
  }

  // 非登录页，但没有 token，强制跳转登录
  if (!token) {
    return next({ name: 'Login', query: { redirect: to.fullPath } });
  }

  // 添加页面缓存
  useCachedViewStoreHook().addCachedView(to);

  // 所有情况只调用一次 next()
  return next();
});

router.afterEach(() => {
  NProgress.done();
});

export default router;
